import { Http } from '../util/http.js'

class ClassicModel extends Http{
  //获取最新期刊
  getLastest(scallback){
      this.request({
          url: 'classic/latest',
      success: (res)=>{
         scallback(res)
         this._setLastedIndex(res.index)
         //将期刊信息写入缓存
         wx.setStorageSync(this._getKey(res.index), res)
      }
    })
  }
  //getPrevious和getNext只有URL不一样，我们进行重构，替换成一个方法
  //旧方式
  //获取上一页期刊
  // getPrevious(index, scallback){
  //   this.request({
  //     url: `classic/${index}/previous`,
  //     success: (res) => {
  //       scallback(res)
  //     }
  //   })

  // }
  // //获取下一页期刊
  // getNext(index, scallback) {
  //   this.request({
  //     url: `classic/${index}/next`,
  //     success: (res) => {
  //       scallback(res)
  //     }
  //   })

  // }
  // //新方式,增加一个参数nextorPervious用于判断请求的接口
  //   getClassic(index, nextorPervious, scallback) {
  //       this.request({
  //         url: `classic/${index}/${nextorPervious}`,
  //         success: (res) => {
  //           scallback(res)
  //         }
  //       })

  //     }
 //进一步为数据加载添加缓存机制，减少http请求，
 //缓存第一步实现私有方法_getKey(),为缓存生成key,规则自定义
    _getKey(index){
      let key = `classic-${index}`
      return key
    }
  //缓存第二步改造getClassic()
    getClassic(index, nextorPervious, scallback) {
      //根据index获取key，index代表当前的期刊号，如果是‘上一期’操作需要index-1,反之+1
      let key = nextorPervious == 'previous' ? this._getKey(index - 1) : this._getKey(index + 1)
      //从缓存中获取数据
      let classic = wx.getStorageSync(key)
      if(!classic){
        //缓存数据不存在就发起http请求，再将获取到的数据写入缓存
        this.request({
          url: `classic/${index}/${nextorPervious}`,
          success: (res) => {
            scallback(res)
            wx.setStorageSync(this._getKey(res.index), res)
          }
        })
      }
      else{
        //缓存存在就直接返回
        scallback(classic)
      }
    }

  //判断是最新期刊
  isLasted(currentIndex){
    let lastedIndex = this._getLastedIndex()
    return currentIndex == lastedIndex ? true : false
  }
  //判断是第一期期刊
  isFirsted(index){
    return index == 1 ? true :false 
  }
  //将最新期刊号存入storage中
  _setLastedIndex(index){
     wx.setStorageSync('lastedIndex', index)
  }
  //从storage中读取最新期刊号
  _getLastedIndex(){
    let index = wx.getStorageSync('lastedIndex')
    return index
  }
  //获取喜欢的期刊
  getikeCalssic(success){
    const params = {
      url: 'classic/favor',
      success: success
    }
    this.request(params)
  }
  //获取某期期刊信息
  getOneCalssic(id,type,success){
    const params = {
      url: `classic/${type}/${id}`,
      success: success
    }
    this.request(params)
  }
}

export { ClassicModel}
